package com.pai4j.domain.vo.request.course;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/**
 * 创建课程请求VO
 *
 * @author: CYM-pai
 * @date: 2025/07/30 10:00
 **/
@Data
public class CreateCourseRequestVO {

    /**
     * 课程标题
     */
    private String title;

    /**
     * 课程描述
     */
    private String description;

    /**
     * 课程封面
     */
    private String cover;

    /**
     * 课程作者
     */
    private String author;

    /**
     * 课程价格（分为单位）
     */
    private Long price;

    /**
     * 课程分类
     */
    private String category;

    /**
     * 课程标签
     */
    private String tags;

    /**
     * 难度等级（1-5）
     */
    private Integer difficulty;

    /**
     * 预计学习时长（分钟）
     */
    private Integer duration;

    /**
     * 课程状态
     */
    private Integer status;

    /**
     * 验证请求参数是否有效
     */
    public void validateRequestParam() {
        // 验证课程标题
        if (StringUtils.isBlank(title)) {
            throw new IllegalArgumentException("课程标题不能为空");
        }
        if (title.length() > 100) {
            throw new IllegalArgumentException("课程标题长度不能超过20个字符");
        }

        // 验证课程描述
        if (StringUtils.isBlank(description)) {
            throw new IllegalArgumentException("课程描述不能为空");
        }
        if (description.length() > 1000) {
            throw new IllegalArgumentException("课程描述长度不能超过100个字符");
        }

        // 验证课程封面
        if (StringUtils.isBlank(cover)) {
            throw new IllegalArgumentException("课程封面不能为空");
        }
        if (!isValidUrl(cover)) {
            throw new IllegalArgumentException("课程封面必须是有效的URL地址");
        }

        // 验证课程作者
        if (StringUtils.isBlank(author)) {
            throw new IllegalArgumentException("课程作者不能为空");
        }
        if (author.length() > 50) {
            throw new IllegalArgumentException("课程作者名称长度不能超过10个字符");
        }

        // 验证课程价格
        if (price == null) {
            throw new IllegalArgumentException("课程价格不能为空");
        }
        if (price < 0) {
            throw new IllegalArgumentException("课程价格不能为负数");
        }
        if (price > 999999999L) {
            throw new IllegalArgumentException("课程价格不能超过999999999分");
        }

        // 验证课程分类
        if (StringUtils.isBlank(category)) {
            throw new IllegalArgumentException("课程分类不能为空");
        }
        if (category.length() > 50) {
            throw new IllegalArgumentException("课程分类长度不能超过50个字符");
        }

        // 验证课程标签
        if (StringUtils.isBlank(tags)) {
            throw new IllegalArgumentException("课程标签不能为空");
        }
        if (tags.length() > 200) {
            throw new IllegalArgumentException("课程标签长度不能超过20个字符");
        }

    }

    /**
     * 验证URL格式是否有效
     */
    private boolean isValidUrl(String url) {
        if (StringUtils.isBlank(url)) {
            return false;
        }
        return url.startsWith("http://") || url.startsWith("https://");
    }
}
